//Copyright (c) 2006-2007 Microsoft Corporation.  All rights reserved
using System;
using System.Collections.Generic;

namespace InvocationFramework.Core.Configuration
{
    /// <summary>
    /// Guarda la informacion de la configuracion del Invocation Framework
    /// </summary>
    internal sealed class ConfigurationInformation
    {
        #region Constructors

        /// <summary>
        /// Constructor
        /// </summary>
        /// <param name="enablePerformanceCounters">Indica si publican o no los performance counters</param>
        /// <param name="enableLocalCatalog">Indica si se activa o no un catalogo local de servicios</param>
        /// <param name="localCatalogInvalidationInterval">Intervalo, en minutos, en los que se invalida el catalogo local de servicios</param>
        /// <param name="callerAdapters">Coleccion con los adaptadores configurados para el cliente</param>
        /// <param name="publisherAdapters">Coleccion con los adaptadores configurados para el publicador</param>
        public ConfigurationInformation( bool enablePerformanceCounters, bool enableLocalCatalog, double localCatalogInvalidationInterval, List<AdapterElement> callerAdapters, List<AdapterElement> publisherAdapters )
        {
            _enablePerformanceCounters = enablePerformanceCounters;
            _enableLocalCatalog = enableLocalCatalog;
            _localCatalogInvalidationInterval = localCatalogInvalidationInterval;
            _callerAdapters = callerAdapters;
            _publisherAdapters = publisherAdapters;
        }

        #endregion

        #region Properties

        /// <summary>
        /// Variable privada para el manejo de la propiedad
        /// </summary>
        private bool _enablePerformanceCounters;

        /// <summary>
        /// Indica si publican o no los performance counters
        /// </summary>
        /// <remarks>
        /// Si se omite en la configuracion el catalogo local esta activado 
        /// </remarks>
        public bool EnablePerformanceCounters
        {
            get
            {
                return _enablePerformanceCounters;
            }
        }

        /// <summary>
        /// Variable privada para el manejo de la propiedad
        /// </summary>
        private bool _enableLocalCatalog;

        /// <summary>
        /// Indica si se mantiene o no un catalogo local de servicios
        /// </summary>
        /// <remarks>
        /// Si se omite en la configuracion el catalogo local esta activado 
        /// </remarks>
        public bool EnableLocalCatalog
        {
            get
            {
                return _enableLocalCatalog;
            }
        }

        /// <summary>
        /// Variable privada para el manejo de la propiedad
        /// </summary>
        private double _localCatalogInvalidationInterval;

        /// <summary>
        /// Intervalo, en minutos, en los que se invalida el catalogo local de servicios
        /// </summary>
        /// <remarks>
        /// Si se omite en la configuracion o el valor es cero o menor no se invalida el catalogo
        /// </remarks>
        public double LocalCatalogInvalidationInterval
        {
            get
            {
                return _localCatalogInvalidationInterval;
            }
        }
        
        /// <summary>
        /// Variable privada para el manejo de la propiedad
        /// </summary>
        private List<AdapterElement> _callerAdapters;

        /// <summary>
        /// Coleccion con los adaptadores configurados para el cliente
        /// </summary>
        public List<AdapterElement> CallerAdapters
        {
            get
            {
                return _callerAdapters;
            }
        }

        /// <summary>
        /// Variable privada para el manejo de la propiedad
        /// </summary>
        private List<AdapterElement> _publisherAdapters;

        /// <summary>
        /// Coleccion con los adaptadores configurados para el publicador
        /// </summary>
        public List<AdapterElement> PublisherAdapters
        {
            get
            {
                return _publisherAdapters;
            }
        }

        #endregion
    }
}